#!/usr/bin/env node

import fs from 'fs'
import path from 'path'
import readline from 'readline'
import { fileURLToPath } from 'url'
import { DETAIL_FIELDS } from './templates/detail/fields.js'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

// 创建readline接口
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
})

// 模板文件路径
const TEMPLATE_FILE = path.join(__dirname, 'templates', 'detail', 'index.vue')

// 提示用户输入
const question = (query: string): Promise<string> => {
  return new Promise(resolve => {
    rl.question(query, resolve)
  })
}

// 确保目录存在
const ensureDirectoryExists = (dirPath: string) => {
  if (!fs.existsSync(dirPath)) {
    fs.mkdirSync(dirPath, { recursive: true })
  }
}

// 读取模板文件
const loadTemplate = (): string => {
  try {
    return fs.readFileSync(TEMPLATE_FILE, 'utf8')
  } catch (error) {
    console.error('❌ 读取模板文件失败:', (error as Error).message)
    console.error('请确保模板文件存在: scripts/templates/detail/index.vue')
    process.exit(1)
  }
}

// 格式化字段配置
const formatFieldConfig = (field: any): string => {
  const lines: string[] = []
  lines.push('  {')
  lines.push(`    label: '${field.label}',`)
  lines.push(`    width: ${field.width},`)
  lines.push(`    prop: '${field.prop}',`)
  lines.push(`    valueType: '${field.valueType}',`)

  if (field.options) {
    lines.push('    options: [')
    field.options.forEach((option: any, index: number) => {
      lines.push('      {')
      lines.push(`        label: '${option.label}',`)
      lines.push(`        value: '${option.value}',`)
      lines.push(`        color: '${option.color}',`)
      lines.push(`      }${index < field.options.length - 1 ? ',' : ''}`)
    })
    lines.push('    ],')
  }

  lines.push('  }')
  return lines.join('\n')
}

// 生成详情页面
const generateDetailPage = async () => {
  try {
    console.log('🚀 开始生成详情页面...\n')

    // 检查必要文件是否存在
    if (!fs.existsSync(TEMPLATE_FILE)) {
      throw new Error(`模板文件不存在: ${TEMPLATE_FILE}`)
    }

    // 获取基本信息
    const moduleName = await question('请输入模块名称 (将在 src/views/ 下创建): ')
    const fileName = (await question('请输入文件名称 (默认: index.vue): ')) || 'index.vue'

    // 构建完整路径（默认在 src/views 下）
    const targetPath = path.join('src/views', moduleName)

    // 确保文件名有.vue扩展名
    const finalFileName = fileName.endsWith('.vue') ? fileName : `${fileName}.vue`

    // 构建完整路径
    const fullPath = path.join(process.cwd(), targetPath)
    const fullFilePath = path.join(fullPath, finalFileName)

    // 确保目录存在
    ensureDirectoryExists(fullPath)

    // 读取模板
    const templateContent = loadTemplate()

    // 验证字段配置
    if (!Array.isArray(DETAIL_FIELDS) || DETAIL_FIELDS.length === 0) {
      throw new Error('字段配置为空或格式不正确')
    }

    // 格式化字段配置
    const formattedFields = DETAIL_FIELDS.map(formatFieldConfig).join(',\n')

    // 替换模板中的占位符
    const finalContent = templateContent.replace('{{COLUMNS_CONFIG}}', formattedFields)

    // 写入文件
    fs.writeFileSync(fullFilePath, finalContent)

    console.log('✅ 详情页面生成成功!')
    console.log(`📁 文件路径: ${fullFilePath}`)
    console.log(`📝 文件名: ${finalFileName}`)
    console.log(`🔧 使用模板: ${TEMPLATE_FILE}`)
    console.log(`📋 使用字段配置: ${DETAIL_FIELDS.length} 个字段`)
    console.log('\n🎉 详情页面已生成完成!')
  } catch (error) {
    console.error('❌ 生成详情页面失败:', error)
  } finally {
    rl.close()
  }
}

// 运行脚本
generateDetailPage()
